//------------------------------------------------------------ // Purpose: Program to calculate Taylors series approximations // of sin(x) and cos(x) with varying number of terms. // Author: John Gauch //------------------------------------------------------------ #include #include #include using namespace std; void print_sin_table(double x, int num_terms, int width) { // local variables double n_factorial = 1; double x_to_n = 1; double taylor_term = 0; double sin_x = 0; // print table header cout << endl << setw(width) << "n" << setw(width) << "x^n/n!" << setw(width) << "sin(x)" << endl; // loop over num_terms for (int n = 1; n <= num_terms; n++) { // calculate taylor_term n_factorial = n_factorial * n; x_to_n = x_to_n * x; taylor_term = x_to_n / n_factorial; // add to sin_x taylors series if (n % 4 == 1) sin_x = sin_x + taylor_term; else if (n % 4 == 3) sin_x = sin_x - taylor_term; // Print variables cout << setw(width) << n << setw(width) << taylor_term << setw(width) << sin_x << endl; } // perform error analysis cout << endl; cout << "estimated sin: " << sin_x << endl; cout << "true sin: " << sin(x) << endl; cout << "sin error: " << sin_x - sin(x) << endl; } void print_cos_table(double x, int num_terms, int width) { // local variables double n_factorial = 1; double x_to_n = 1; double taylor_term = 0; double cos_x = 1; int sign = 1; // print table header cout << endl << setw(width) << "n" << setw(width) << "x^n/n!" << setw(width) << "cos(x)" << endl; // loop over num_terms for (int n = 1; n <= num_terms; n++) { // calculate taylor_term n_factorial = n_factorial * n; x_to_n = x_to_n * x; taylor_term = x_to_n / n_factorial; // add to cos_x taylors series if (n % 2 == 0) { sign = -sign; cos_x = cos_x + taylor_term * sign; } // Print variables cout << setw(width) << n << setw(width) << taylor_term << setw(width) << cos_x << endl; } // perform error analysis cout << endl; cout << "estimated cos: " << cos_x << endl; cout << "true cos: " << cos(x) << endl; cout << "cos error: " << cos_x - cos(x) << endl; } int main() { // local variables int width = 15; double x = 0; int num_terms = 0; double n_factorial = 1; double x_to_n = 1; // read user input cout << "Enter angle in radians: "; cin >> x; cout << "Enter number of terms: "; cin >> num_terms; // print first table cout << setw(width) << "n" << setw(width) << "n!" << setw(width) << "x^n" << endl; // loop over num_terms for (int n = 1; n <= num_terms; n++) { // calculate taylor_term n_factorial = n_factorial * n; x_to_n = x_to_n * x; // Print variables cout << setw(width) << n << setw(width) << n_factorial << setw(width) << x_to_n << endl; } // print two more tables print_sin_table(x, num_terms, width); print_cos_table(x, num_terms, width); return 0; }